Page({
  data: {
    searchValue: '', // 搜索框输入值
    historyList: [], // 历史搜索记录
    suggestList: [], // 搜索建议列表
    searchResult: [], // 搜索结果列表
    isSearching: false, // 是否正在搜索
    showClearModal: false, // 是否显示清空确认弹窗
    showToast: false, // 轻提示
    toastText: '', // 提示文本
    wxUserId: '',       // 用户ID（后端关联用）
    token: ''           // 认证令牌
  },

  onLoad() {
    // 页面加载时读取本地历史记录
    const history = wx.getStorageSync('searchHistory') || [];
    this.setData({ historyList: history });
    const app = getApp();
    // 获取全局用户信息（与支付页面逻辑一致）
    const wxUserId = app.globalData.userId;
    const token = app.globalData.token || wx.getStorageSync('token');
    this.setData( {wxUserId, token} )

    // 校验：未登录/Token为空时直接提示，不发起请求
    if (!wxUserId || !token) {
      wx.showToast({ title: '请先登录', icon: 'none' });
      return;
    }
  },

  // 输入框内容变化时仅更新建议（不执行搜索）
  onInput(e) {
    const value = e.detail.value.trim();
    this.setData({ searchValue: value });

    // 输入时显示搜索建议（不执行实际搜索）
    if (value) {
      // 模拟搜索建议（实际项目可调用接口获取）
      const suggests = [
        `${value}护理`,
        `${value}服务`,
        `专业${value}`
      ];
      this.setData({ suggestList: suggests });
    } else {
      // 输入为空时清空建议，显示历史记录
      this.setData({ suggestList: [] });
    }
  },

  // 点击清空输入框
  clearInput() {
    this.setData({
      searchValue: '',
      suggestList: [],
      searchResult: []
    });
  },

  // 点击取消按钮
  cancelSearch() {
    wx.navigateBack(); // 返回上一页
  },

  // 执行搜索（点击搜索按钮或回车时触发）
  doSearch() {
    const { searchValue } = this.data;
    if (!searchValue) {
      this.showAutoHideToast('请输入搜索关键词');
      return;
    }

    this.setData({ isSearching: true });
    const { wxUserId, token } = this.data;
    // 调用后端搜索接口（根据关键词查询服务）
    wx.request({
      url: 'http://localhost:8080/api/nursingItem/list',
      method: 'GET',
      header: { 'Authorization': 'Bearer ' + token },
      data: {
        name: searchValue, // 模糊搜索服务名称
        status: 1 // 只查询启用状态
      },
      success: (res) => {
        if (res.data.code === 200) {
          // 保存搜索历史（去重+限制数量）
          this.saveSearchHistory(searchValue);
          // 更新搜索结果
          this.setData({
            searchResult: res.data.data,
            suggestList: [], // 隐藏建议列表
            isSearching: false
          });
        }
      },
      fail: () => {
        wx.showToast({ title: '搜索失败', icon: 'none' });
        this.setData({ isSearching: false });
      }
    });
  },

  // 保存搜索历史（完善逻辑）
  saveSearchHistory(keyword) {
    let { historyList } = this.data;
    // 去重（如果已存在则先删除）
    historyList = historyList.filter(item => item !== keyword);
    // 插入到最前面（最新的在最前）
    historyList.unshift(keyword);
    // 限制最多保存10条
    if (historyList.length > 10) {
      historyList = historyList.slice(0, 10);
    }
    // 保存到本地存储
    wx.setStorageSync('searchHistory', historyList);
    // 更新页面数据
    this.setData({ historyList });
  },

  // 点击历史标签搜索
  searchByHistory(e) {
    const keyword = e.currentTarget.dataset.item;
    this.setData({ searchValue: keyword });
    this.doSearch(); // 执行搜索
  },

  // 点击建议项搜索
  searchBySuggest(e) {
    const keyword = e.currentTarget.textContent;
    this.setData({ searchValue: keyword });
    this.doSearch(); // 执行搜索
  },

  // 显示清空确认弹窗
  showClearConfirm() {
    this.setData({ showClearModal: true });
  },

  // 隐藏清空确认弹窗
  hideClearModal() {
    this.setData({ showClearModal: false });
  },

  // 清空历史记录
  clearHistory() {
    wx.removeStorageSync('searchHistory');
    this.setData({
      historyList: [],
      showClearModal: false
    });
    this.showAutoHideToast('历史记录已清空');
  },

  // 跳转到服务详情页
  goToServiceDetail(e) {
    const serviceData = e.currentTarget.dataset.service;
    wx.navigateTo({
      url: `/pages/service/prodctDetails/prodctDetails?service=${JSON.stringify(serviceData)}`,
    });
  },

  // 显示自动消失的提示
  showAutoHideToast(text) {
    this.setData({
      showToast: true,
      toastText: text
    });
    setTimeout(() => {
      this.setData({ showToast: false });
    }, 2000);
  }
});
